#ツールチップ

#ツールチップの構成

名前空間:options.plugins.tooltip、グラフのツールチップのグローバル オプションは次のように定義されています。Chart.defaults.plugins.tooltip

名前 タイプ デフォルト 説明
enabled boolean true キャンバス上のツールチップは有効になっていますか?
external function null 見る外部ツールチップセクション。
mode string interaction.mode ツールチップに表示される要素を設定します。もっと...
intersect boolean interaction.intersect true の場合、ツールチップ モードはマウスの位置が要素と交差する場合にのみ適用されます。 false の場合、モードは常に適用されます。
position string 888b362b-72a3-47f7-ad9e-924de​​c7f306f ツールチップを配置するためのモード。もっと...
callbacks object を参照してください。コールバックセクション
itemSort function ツールチップ項目を並べ替えます。もっと...
filter function ツールチップ項目をフィルターします。もっと...
backgroundColor Color 'rgba(0, 0, 0, 0.8)' ツールチップの背景色。
titleColor Color '#fff' タイトルのテキストの色。
titleFont Font {weight: 'bold'} 見るフォント
titleAlign string 'left' タイトルテキスト行の水平方向の配置。もっと...
titleSpacing number 2 各タイトル行の上下に追加するスペース。
titleMarginBottom number 6 タイトルセクションの下部に追加するマージン。
bodyColor Color '#fff' 本文の色。
bodyFont Font {} 見るフォント
bodyAlign string 'left' 本文テキスト行の水平方向の配置。もっと...
bodySpacing number 2 各ツールチップ項目の上部と下部に追加する間隔。
footerColor Color '#fff' フッターテキストの色。
footerFont Font {weight: 'bold'} 見るフォント
footerAlign string 'left' フッターテキスト行の水平方向の配置。もっと...
footerSpacing number 2 各フッター行の上部と下部に追加するスペース。
footerMarginTop number 6 フッターを描画する前に追加するマージン。
padding Padding 6 ツールチップ内のパディング。
caretPadding number 2 ツールチップの矢印の端をツールチップの点から遠ざけるための追加の距離。
caretSize number 5 ツールチップの矢印のサイズ (ピクセル単位)。
cornerRadius number|object 6 ツールチップのコーナーカーブの半径。
multiKeyBackground Color '#fff' ツールチップに複数の項目がある場合に、色付きボックスの後ろに描画する色。
displayColors boolean true true の場合、ツールチップにカラー ボックスが表示されます。
boxWidth number bodyFont.size displayColors が true の場合のカラー ボックスの幅。
boxHeight number bodyFont.size displayColors が true の場合のカラー ボックスの高さ。
boxPadding number 1 カラーボックスとテキストの間のパディング。
usePointStyle boolean false カラー ボックスの代わりに、対応するポイント スタイル (データセット オプションから) を使用します (例: 星、三角形など) (サイズは boxWidth と boxHeight の間の最小値に基づきます)。
borderColor Color 'rgba(0, 0, 0, 0)' 境界線の色。
borderWidth number 0 境界線のサイズ。
rtl boolean trueツールチップを右から左にレンダリングします。
textDirection string キャンバスのデフォルト これによりテキストの方向が強制されます'rtl'また'ltr'キャンバス上で指定された CSS に関係なく、ツールチップをレンダリングするためにキャンバス上で
xAlign string undefined ツールチップ キャレットの X 方向の位置。もっと
yAlign string undefined Y 方向のツールチップ キャレットの位置。もっと

ノート

さらに視覚的なカスタマイズが必要な場合は、HTML ツールチップ

#位置モード

可能なモードは次のとおりです。

  • 'average'
  • 'nearest'

'average'モードでは、ツールチップに表示される項目の平均的な位置にツールチップが配置されます。'nearest'イベント位置に最も近い要素の位置にツールチップを配置します。

定義することもできますカスタム位置モード

#ツールチップの配置

xAlignyAlignオプションはツールチップ キャレットの位置を定義します。これらのパラメータが設定されていない場合、最適なキャレット位置が決定されます。

次の値は、xAlign設定がサポートされています。

  • 'left'
  • 'center'
  • 'right'

次の値は、yAlign設定がサポートされています。

  • 'top'
  • 'center'
  • 'bottom'

#テキストの配置

titleAlignbodyAlignfooterAlignオプションは、ツールヒント ボックスに対するテキスト行の水平位置を定義します。次の値がサポートされています。

  • 'left'(デフォルト)
  • 'right'
  • 'center'

これらのオプションはテキスト行にのみ適用されます。カラー ボックスは常に左端に揃えられます。

#ソートコールバック

の並べ替えを可能にしますツールチップ項目。少なくとも渡すことができる関数を実装する必要があります配列.プロトタイプ.ソート (新しいウィンドウが開きます)。この関数は、チャートに渡されるデータ オブジェクトである 3 番目のパラメーターも受け入れることができます。

#フィルターコールバック

フィルタリングを許可しますツールチップ項目。少なくとも渡すことができる関数を実装する必要があります配列.プロトタイプ.フィルター (新しいウィンドウが開きます)。この関数は、チャートに渡されるデータ オブジェクトである 4 番目のパラメーターも受け入れることができます。

#ツールチップのコールバック

名前空間:options.plugins.tooltip.callbacks、ツールチップにはテキストを提供するための次のコールバックがあります。すべての機能について、thisから作成されたツールチップ オブジェクトになります。Tooltipコンストラクタ。コールバックが返された場合undefinedの場合、デフォルトのコールバックが使用されます。ツールチップから項目を削除するには、コールバックは空の文字列を返す必要があります。

名前空間:data.datasets[].tooltip.callbacks、マークが付いている項目Yesコラムの中でDataset overrideデータセットごとにオーバーライドできます。

ツールチップ項目のコンテキストツールヒントに表示される項目ごとに生成されます。これは、コールバック メソッドが対話する主要なモデルです。テキストを返す関数の場合、文字列の配列は複数行のテキストとして扱われます。

名前 引数 戻り値の型 データセットの上書き 説明
beforeTitle TooltipItem[] string | string[] | undefined タイトルの前にレンダリングするテキストを返します。
title TooltipItem[] string | string[] | undefined ツールヒントのタイトルとしてレンダリングするテキストを返します。
afterTitle TooltipItem[] string | string[] | undefined タイトルの後に表示するテキストを返します。
beforeBody TooltipItem[] string | string[] | undefined 本文セクションの前にレンダリングするテキストを返します。
beforeLabel TooltipItem string | string[] | undefined はい 個々のラベルの前にレンダリングするテキストを返します。これは、ツールチップの項目ごとに呼び出されます。
label TooltipItem string | string[] | undefined はい ツールチップ内の個々の項目に対してレンダリングするテキストを返します。もっと...
labelColor TooltipItem object | undefined はい ツールチップ項目をレンダリングする色を返します。もっと...
labelTextColor TooltipItem Color | undefined はい ツールチップ項目のラベルのテキストの色を返します。
labelPointStyle TooltipItem object | undefined はい usePointStyle が true の場合、カラー ボックスの代わりに使用するポイント スタイルを返します(値を持つオブジェクト)pointStylerotation)。デフォルトの実装では、データセット ポイントのポイント スタイルが使用されます。もっと...
afterLabel TooltipItem string | string[] | undefined はい 個々のラベルの後にレンダリングするテキストを返します。
afterBody TooltipItem[] string | string[] | undefined 本体セクションの後にレンダリングするテキストを返します。
beforeFooter TooltipItem[] string | string[] | undefined フッターセクションの前にレンダリングするテキストを返します。
footer TooltipItem[] string | string[] | undefined ツールヒントのフッターとしてレンダリングするテキストを返します。
afterFooter TooltipItem[] string | string[] | undefined フッターセクションの後にレンダリングするテキスト。

#ラベルコールバック

labelコールバックは、特定のデータ ポイントに対して表示されるテキストを変更できます。ユニットを示す一般的な例。以下の例では、'$'すべての行の前に。

const chart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: {
        plugins: {
            tooltip: {
                callbacks: {
                    label: function(context) {
                        let label = context.dataset.label || '';
                        if (label) {
                            label += ': ';
                        }
                        if (context.parsed.y !== null) {
                            label += new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(context.parsed.y);
                        }
                        return label;
                    }
                }
            }
        }
    }
});

#ラベルの色のコールバック

たとえば、ツールチップ内の各項目の境界半径を持つ青い破線の境界線を持つ赤いボックスを返すには、次のようにします。

const chart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: {
        plugins: {
            tooltip: {
                callbacks: {
                    labelColor: function(context) {
                        return {
                            borderColor: 'rgb(0, 0, 255)',
                            backgroundColor: 'rgb(255, 0, 0)',
                            borderWidth: 2,
                            borderDash: [2, 2],
                            borderRadius: 2,
                        };
                    },
                    labelTextColor: function(context) {
                        return '#543453';
                    }
                }
            }
        }
    }
});

#ラベル ポイント スタイル コールバック

たとえば、ツールヒントの各項目に通常のカラー ボックスの代わりに三角形を描画するには、次のようにします。

const chart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: {
        plugins: {
            tooltip: {
                usePointStyle: true,
                callbacks: {
                    labelPointStyle: function(context) {
                        return {
                            pointStyle: 'triangle',
                            rotation: 0
                        };
                    }
                }
            }
        }
    }
});

#ツールチップ項目のコンテキスト

ツールチップ コールバックに渡されるツールチップ項目は、次のインターフェイスを実装します。

{
    // The chart the tooltip is being shown on
    chart: Chart
    // Label for the tooltip
    label: string,
    // Parsed data values for the given `dataIndex` and `datasetIndex`
    parsed: object,
    // Raw data values for the given `dataIndex` and `datasetIndex`
    raw: object,
    // Formatted value for the tooltip
    formattedValue: string,
    // The dataset the item comes from
    dataset: object
    // Index of the dataset the item comes from
    datasetIndex: number,
    // Index of this data item in the dataset
    dataIndex: number,
    // The chart element (point, arc, bar, etc.) for this tooltip item
    element: Element,
}

#外部 (カスタム) ツールチップ

外部ツールチップを使用すると、ツールチップのレンダリング プロセスにフックできるため、独自のカスタム方法でツールチップをレンダリングできます。通常、これはキャンバス上のツールチップではなく HTML ツールチップを作成するために使用されます。のexternalオプションは、charttooltip。次のように、グローバルまたはチャート設定で外部ツールチップを有効にすることができます。

const myPieChart = new Chart(ctx, {
    type: 'pie',
    data: data,
    options: {
        plugins: {
            tooltip: {
                // Disable the on-canvas tooltip
                enabled: false,
                external: function(context) {
                    // Tooltip Element
                    let tooltipEl = document.getElementById('chartjs-tooltip');
                    // Create element on first render
                    if (!tooltipEl) {
                        tooltipEl = document.createElement('div');
                        tooltipEl.id = 'chartjs-tooltip';
                        tooltipEl.innerHTML = '<table></table>';
                        document.body.appendChild(tooltipEl);
                    }
                    // Hide if no tooltip
                    const tooltipModel = context.tooltip;
                    if (tooltipModel.opacity === 0) {
                        tooltipEl.style.opacity = 0;
                        return;
                    }
                    // Set caret Position
                    tooltipEl.classList.remove('above', 'below', 'no-transform');
                    if (tooltipModel.yAlign) {
                        tooltipEl.classList.add(tooltipModel.yAlign);
                    } else {
                        tooltipEl.classList.add('no-transform');
                    }
                    function getBody(bodyItem) {
                        return bodyItem.lines;
                    }
                    // Set Text
                    if (tooltipModel.body) {
                        const titleLines = tooltipModel.title || [];
                        const bodyLines = tooltipModel.body.map(getBody);
                        let innerHtml = '<thead>';
                        titleLines.forEach(function(title) {
                            innerHtml += '<tr><th>' + title + '</th></tr>';
                        });
                        innerHtml += '</thead><tbody>';
                        bodyLines.forEach(function(body, i) {
                            const colors = tooltipModel.labelColors[i];
                            let style = 'background:' + colors.backgroundColor;
                            style += '; border-color:' + colors.borderColor;
                            style += '; border-width: 2px';
                            const span = '<span style="' + style + '">' + body + '</span>';
                            innerHtml += '<tr><td>' + span + '</td></tr>';
                        });
                        innerHtml += '</tbody>';
                        let tableRoot = tooltipEl.querySelector('table');
                        tableRoot.innerHTML = innerHtml;
                    }
                    const position = context.chart.canvas.getBoundingClientRect();
                    const bodyFont = Chart.helpers.toFont(tooltipModel.options.bodyFont);
                    // Display, position, and set styles for font
                    tooltipEl.style.opacity = 1;
                    tooltipEl.style.position = 'absolute';
                    tooltipEl.style.left = position.left + window.pageXOffset + tooltipModel.caretX + 'px';
                    tooltipEl.style.top = position.top + window.pageYOffset + tooltipModel.caretY + 'px';
                    tooltipEl.style.font = bodyFont.string;
                    tooltipEl.style.padding = tooltipModel.padding + 'px ' + tooltipModel.padding + 'px';
                    tooltipEl.style.pointerEvents = 'none';
                }
            }
        }
    }
});

見るサンプル外部ツールチップの使用を開始する方法の例については、こちらを参照してください。

#ツールチップモデル

ツールチップ モデルには、ツールチップのレンダリングに使用できるパラメータが含まれています。

{
    chart: Chart,
    // The items that we are rendering in the tooltip. See Tooltip Item Interface section
    dataPoints: TooltipItem[],
    // Positioning
    xAlign: string,
    yAlign: string,
    // X and Y properties are the top left of the tooltip
    x: number,
    y: number,
    width: number,
    height: number,
    // Where the tooltip points to
    caretX: number,
    caretY: number,
    // Body
    // The body lines that need to be rendered
    // Each object contains 3 parameters
    // before: string[] // lines of text before the line with the color square
    // lines: string[], // lines of text to render as the main item with color square
    // after: string[], // lines of text to render after the main lines
    body: object[],
    // lines of text that appear after the title but before the body
    beforeBody: string[],
    // line of text that appear after the body and before the footer
    afterBody: string[],
    // Title
    // lines of text that form the title
    title: string[],
    // Footer
    // lines of text that form the footer
    footer: string[],
    // style to render for each item in body[]. This is the style of the squares in the tooltip
    labelColors: TooltipLabelStyle[],
    labelTextColors: Color[],
    labelPointStyles: { pointStyle: PointStyle; rotation: number }[],
    // 0 opacity is a hidden tooltip
    opacity: number,
    // tooltip options
    options: Object
}

#カスタム位置モード

新しいモードは、関数を追加することで定義できます。Chart.Tooltip.positioners地図。

例:

import { Tooltip } from 'chart.js';
/**
 * Custom positioner
 * @function Tooltip.positioners.myCustomPositioner
 * @param elements {Chart.Element[]} the tooltip elements
 * @param eventPosition {Point} the position of the event in canvas coordinates
 * @returns {TooltipPosition} the tooltip position
 */
Tooltip.positioners.myCustomPositioner = function(elements, eventPosition) {
    // A reference to the tooltip model
    const tooltip = this;
    /* ... */
    return {
        x: 0,
        y: 0
        // You may also include xAlign and yAlign to override those tooltip options.
    };
};
// Then, to use it...
new Chart.js(ctx, {
    data,
    options: {
        plugins: {
            tooltip: {
                position: 'myCustomPositioner'
            }
        }
    }
})

見るサンプルより詳細な例については、

TypeScript を使用している場合は、新しいモードを登録する必要もあります。

declare module 'chart.js' {
  interface TooltipPositionerMap {
    myCustomPositioner: TooltipPositionerFunction<ChartType>;
  }
}
最終更新: 2023 年 4 月 28 日、午前 5 時 18 分 20 秒